package com.benshou.bsoa.dto.xinchou.res;

import com.fasterxml.jackson.annotation.JsonProperty;
import lombok.Data;

import java.util.List;

/**
 * 薪资账户响应数据传输对象 (DTO)
 * 用于封装从薪资账户接口返回的数据
 */
@Data
public class SalaryAccountResponse {
    private String errorCode; // 错误码
    private String errorMsg; // 错误信息
    private Boolean bizSuccess; // 业务是否成功
    private Result result; // 返回的结果数据

    @Data
    public static class Result {
        private List<DataItem> list; // 数据列表

        @Data
        public static class DataItem {
            private Long employeeId; // 员工ID
            private String employeeName; // 员工姓名
            private String employeeNo; // 员工工号

            private List<RecordData> recordData; // 核算活动数据
            private List<SalaryAccount> salaryAccountList; // 薪资账户数据

            @Data
            public static class RecordData {
                private Long recordId; // 活动ID
                private String recordName; // 活动名称
                private String sendSalaryRange; // 薪资范围
                private String sendSalaryRangeTips; // 薪资范围提示
                private String taxBeLong; // 个税所属期
                private List<String> calcSalaryRange; // 计算薪资范围
                private int calcCount; // 计薪人数
                private String creator; // 创建者
                private String createTime; // 创建时间 (格式: yyyy-MM-dd HH:mm:ss)
            }

            @Data
            public static class SalaryAccount {
                @JsonProperty("telephone")
                private String telephone; // 个人电话
                @JsonProperty("birthday")
                private String birthday; // 出生日期
                @JsonProperty("gender")
                private String gender; // 性别
                @JsonProperty("country")
                private String country; // 国籍
                @JsonProperty("id_type")
                private String idType; // 证件类型
                @JsonProperty("tax_option")
                private String taxOption; // 缴税类型
                @JsonProperty("corporation")
                private String corporation; // 法人公司
                @JsonProperty("realname")
                private String realname; // 姓名
                @JsonProperty("employee_no")
                private String employeeNo; // 工号
                @JsonProperty("id_no")
                private String idNo; // 证件号码
                @JsonProperty("end_probation_date")
                private String endProbationDate; // 转正日期
                @JsonProperty("department")
                private String department; // 部门
                @JsonProperty("on_boarding_date")
                private String onBoardingDate; // 入职日期
                @JsonProperty("leave_date")
                private String leaveDate; // 离职日期
                @JsonProperty("end_date")
                private String endDate; // 最后发薪日
                @JsonProperty("effect_date")
                private String basicWage; // 基本工资
                @JsonProperty("start_date")
                private String communicationSubsidy; // 通讯补贴
                @JsonProperty("computer_subsidy")
                private String computerSubsidy; // 电脑补贴
                @JsonProperty("performance_bonus")
                private String performanceBonus; // 绩效奖金
                @JsonProperty("days_absent_from_work")
                private String daysAbsentFromWork; // 旷工天数
                @JsonProperty("length_of_sick_leave")
                private String lengthOfSickLeave; // 病假天数
                @JsonProperty("leave_duration")
                private String leaveDuration; // 事假天数
                @JsonProperty("annual_leave_resignation_days")
                private String annualLeaveResignationDays; // 年假离职清算天数
                @JsonProperty("absenteeism_deduction")
                private String absenteeismDeduction; // 旷工扣款
                @JsonProperty("sick_leave_deduction")
                private String sickLeaveDeduction; // 病假扣款
                @JsonProperty("leave_deduction")
                private String leaveDeduction; // 事假扣款
                @JsonProperty("total_attendance_deduction")
                private String totalAttendanceDeduction; // 考勤扣款合计
                @JsonProperty("personal_pension_insurance")
                private String personalPensionInsurance; // 个人养老保险
                @JsonProperty("personal_medical_insurance")
                private String personalMedicalInsurance; // 个人医疗保险
                @JsonProperty("individual_unemployment_insurance")
                private String individualUnemploymentInsurance; // 个人失业保险
                @JsonProperty("total_personal_insurance")
                private String totalPersonalInsurance; // 个人保险合计
                @JsonProperty("personal_endowment_insurance_payment")
                private String personalEndowmentInsurancePayment; // 个人养老保险补缴
                @JsonProperty("personal_medical_insurance_repayment")
                private String personalMedicalInsuranceRepayment; // 个人医疗保险补缴
                @JsonProperty("individual_unemployment_insurance_payment")
                private String individualUnemploymentInsurancePayment; // 个人失业保险补缴
                @JsonProperty("total_personal_insurance_payment")
                private String totalPersonalInsurancePayment; // 个人保险补缴合计
                @JsonProperty("total_personal_insurance_including_repayment")
                private String totalPersonalInsuranceIncludingRepayment; // 个人保险合计(含补缴)
                @JsonProperty("personal_provident_fund")
                private String personalProvidentFund; // 个人公积金
                @JsonProperty("total_personal_social_security_provident_fund")
                private String totalPersonalSocialSecurityProvidentFund; // 个人社保公积金合计
                @JsonProperty("company_pension_insurance")
                private String companyPensionInsurance; // 公司养老保险
                @JsonProperty("company_medical_insurance")
                private String companyMedicalInsurance; // 公司医疗保险
                @JsonProperty("corporate_unemployment_insurance")
                private String corporateUnemploymentInsurance; // 公司失业保险
                @JsonProperty("company_work_injury_insurance")
                private String companyWorkInjuryInsurance; // 公司工伤保险
                @JsonProperty("company_maternity_insurance")
                private String companyMaternityInsurance; // 公司生育保险
                @JsonProperty("total_company_insurance")
                private String totalCompanyInsurance; // 公司保险合计
                @JsonProperty("company_pension_insurance_payment")
                private String companyPensionInsurancePayment; // 公司养老保险补缴
                @JsonProperty("company_medical_insurance_repayment")
                private String companyMedicalInsuranceRepayment; // 公司医疗保险补缴
                @JsonProperty("company_unemployment_insurance_payment")
                private String companyUnemploymentInsurancePayment; // 公司失业保险补缴
                @JsonProperty("company_work_injury_insurance_pay")
                private String companyWorkInjuryInsurancePay; // 公司工伤保险补缴
                @JsonProperty("company_maternity_insurance_repayment")
                private String companyMaternityInsuranceRepayment; // 公司生育保险补缴
                @JsonProperty("total_company_insurance_including_repayment")
                private String totalCompanyInsuranceIncludingRepayment; // 公司保险合计(含补缴)
                @JsonProperty("company_provident_fund")
                private String companyProvidentFund; // 公司公积金
                @JsonProperty("total_company_social_security_provident_fund")
                private String totalCompanySocialSecurityProvidentFund; // 公司社保公积金合计
                @JsonProperty("total_company_insurance_repayment")
                private String totalCompanyInsuranceRepayment; // 公司保险补缴合计
                @JsonProperty("cumulative_child_education")
                private String cumulativeChildEducation; // 累计子女教育
                @JsonProperty("accumulated_housing_rent")
                private String accumulatedHousingRent; // 累计住房租金
                @JsonProperty("accumulated_housing_loan_interest")
                private String accumulatedHousingLoanInterest; // 累计住房贷款利息
                @JsonProperty("cumulative_support_for_the_elderly")
                private String cumulativeSupportForTheElderly; // 累计赡养老人
                @JsonProperty("cumulative_continuing_education")
                private String cumulativeContinuingEducation; // 累计继续教育
                @JsonProperty("cumulative_child_care_fee")
                private String cumulativeChildCareFee; // 累计婴幼儿照护费
                @JsonProperty("cumulative_income_as_of_last_month")
                private String cumulativeIncomeAsOfLastMonth; // 累计收入额(截至上月)
                @JsonProperty("cumulative_deductions_as_of_last_month")
                private String cumulativeDeductionsAsOfLastMonth; // 累计减除费用(截至上月)
                @JsonProperty("cumulative_special_deductions_as_of_last_month")
                private String cumulativeSpecialDeductionsAsOfLastMonth; // 累计专项扣除(截至上月)
                @JsonProperty("cumulative_prepaid_tax_as_of_last_month")
                private String cumulativePrepaidTaxAsOfLastMonth; // 累计已预缴税额(截至上月)
                @JsonProperty("quick_deduction")
                private String quickDeduction; // 速算扣除数
                @JsonProperty("tax_rate")
                private String taxRate; // 税率
                @JsonProperty("cumulative_income")
                private String cumulativeIncome; // 累计收入额
                @JsonProperty("cumulative_deductions")
                private String cumulativeDeductions; // 累计减除费用
                @JsonProperty("cumulative_special_deduction")
                private String cumulativeSpecialDeduction; // 累计专项扣除
                @JsonProperty("cumulative_special_additional_deduction")
                private String cumulativeSpecialAdditionalDeduction; // 累计专项附加扣除
                @JsonProperty("cumulative_taxable_income")
                private String cumulativeTaxableIncome; // 累计应纳税所得额
                @JsonProperty("tax_payable_as_of_this_month")
                private String taxPayableAsOfThisMonth; // 应预缴税额(截至本月)
                @JsonProperty("actual_prepaid_tax_this_month")
                private String actualPrepaidTaxThisMonth; // 实际预缴税额(本月)
                @JsonProperty("year_end_bonus_should_be_given")
                private String yearEndBonusShouldBeGiven; // 年终奖应发
                @JsonProperty("year_end_bonus_tax")
                private String yearEndBonusTax; // 年终奖金个税
                @JsonProperty("year_end_bonus")
                private String yearEndBonus; // 年终奖实发
                @JsonProperty("salary_start_date")
                private String salaryStartDate; // 计薪开始日期
                @JsonProperty("salary_end_date")
                private String salaryEndDate; // 计薪结束日期
                @JsonProperty("overtime")
                private String overtime; // 加班费
                @JsonProperty("resignation_compensation")
                private String resignationCompensation; // 离职补偿金额
                @JsonProperty("payable")
                private String payable; // 应发工资
                @JsonProperty("disability_payment")
                private String disabilityPayment; // 残障金
                @JsonProperty("commercial_insurance")
                private String commercialInsurance; // 商业保险金
                @JsonProperty("paid_wages")
                private String paidWages; // 实发工资
                @JsonProperty("service_charge")
                private String serviceCharge; // 服务费
                @JsonProperty("total_labor_cost")
                private String totalLaborCost; // 人力成本合计
                @JsonProperty("tax_period")
                private String taxPeriod; // 个税所属期
                @JsonProperty("payroll_organization")
                private String payrollOrganization; // 发薪组织
            }
        }
    }
}